﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

namespace MemoryDuosControl
{
    public class AccesoPartida
    {
        public AccesoPartida(Usuario usu)
        {
            UsuarioDesafiante = usu;
        }

        public int ID { get; set; }

        public Usuario UsuarioDesafiante { get; set; }

        public Usuario UsuarioDesafiado { get; set; }

        public EstadoPeticion IniciarPartida(string nick, string galeria)
        {
            //return true;
            string address = string.Format(Conexion.UrlPruebas + "CrearPartida.php");
            String text;
            String json;
            JObject o = new JObject();
            o["Nick"] = nick;
            o["Galeria"] = galeria;
            json = o.ToString();
            using (CookieAwareWebClient client = new CookieAwareWebClient(UsuarioDesafiante.SessionID))
            {
                text = client.UploadString(address, json);
            }

            EstadoPeticion estado = JsonConvert.DeserializeObject<EstadoPeticion>(text);
            if (!estado.Estado)
            {
                throw new Exception("Ha ocurrido una excepción al crear la partida. Detalles:\nError:" + estado.Error);
            }
            return estado;
        }
    }

    public class Partida
    {
        public int Codigo { get; set; }

        public int Usuario_1 { get; set; }

        public int Usuario_2 { get; set; }

        public int? Puntuacion_1 { get; set; }

        public int? Puntuacion_2 { get; set; }

        public int Turno { get; set; }

        public DateTime? Ultima_Jugada { get; set; }

        public DateTime Fecha_inicio { get; set; }

        public DateTime? Fecha_Fin { get; set; }

        [JsonConverter(typeof(BoolConverter))]
        public bool Aceptada { get; set; }

        public string Nick_1 { get; set; }

        public string Nick_2 { get; set; }

        [JsonConverter(typeof(BoolConverter))]
        public bool Powerup_1 { get; set; }

        [JsonConverter(typeof(BoolConverter))]
        public bool Powerup_2 { get; set; }

        public int NMovimiento { get; set; }

        public override string ToString()
        {
            return Fecha_inicio.ToLocalTime() + "\t\t" + (Ultima_Jugada.HasValue ? Ultima_Jugada.Value.ToLocalTime().ToString() : "");
        }

        public string ToStringFechaFin()
        {
            // return (Fecha_Fin.HasValue ? Fecha_Fin.Value.ToLocalTime().ToString() : "") + "\t\t"
            // + (Ultima_Jugada.HasValue ? Ultima_Jugada.Value.ToLocalTime().ToString() : "");
            return (Fecha_Fin.HasValue ? Fecha_Fin.Value.ToLocalTime().ToString() : Ultima_Jugada.Value.ToLocalTime().ToString());
        }

        public string ToStringPuntuacion()
        {
            return Puntuacion_1 + "-" + Puntuacion_2;
        }

        public string ToStringFechaInicio()
        {
            return Fecha_inicio.ToString();
        }
    }

    public class EstadoTablero
    {
        public string Codigo { get; set; }

        public List<CasillaTablero> Estado { get; set; }

        public string Galeria_Nombre { get; set; }

        public List<CasillaTablero> Destapadas { get; set; }
    }
}
